sql.h   [plain text]
/*
 *  sql.h
 *
 *  $Id: sql.h,v 1.9 2006/01/20 15:58:34 source Exp $
 *
 *  ODBC defines
 *
 *  The iODBC driver manager.
 *
 *  Copyright (C) 1995 by Ke Jin <kejin@empress.com>
 *  Copyright (C) 1996-2006 by OpenLink Software <iodbc@openlinksw.com>
 *  All Rights Reserved.
 *
 *  This software is released under the terms of either of the following
 *  licenses:
 *
 *      - GNU Library General Public License (see LICENSE.LGPL)
 *      - The BSD License (see LICENSE.BSD).
 *
 *  Note that the only valid version of the LGPL license as far as this
 *  project is concerned is the original GNU Library General Public License
 *  Version 2, dated June 1991.
 *
 *  While not mandated by the BSD license, any patches you make to the
 *  iODBC source code may be contributed back into the iODBC project
 *  at your discretion. Contributions will benefit the Open Source and
 *  Data Access community as a whole. Submissions may be made at:
 *
 *      http://www.iodbc.org
 *
 *
 *  GNU Library Generic Public License Version 2
 *  ============================================
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; only
 *  Version 2 of the License dated June 1991.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public
 *  License along with this library; if not, write to the Free
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *
 *  The BSD License
 *  ===============
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *  3. Neither the name of OpenLink Software Inc. nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR
 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _SQL_H
#define _SQL_H

/*
 *  Set default specification to ODBC 3.51
 */
#ifndef ODBCVER
#define ODBCVER     0x0351
#endif

/*
 *  Include Windows style defines and typedefs on Unix
 */
#ifndef _IODBCUNIX_H
#include <iodbcunix.h>
#endif

#ifndef _SQLTYPES_H
#include <sqltypes.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif

/*
 *  Useful Constants
 */
#define SQL_MAX_MESSAGE_LENGTH          512


/*
 *  Handle types
 */
#if (ODBCVER >= 0x0300)
#define SQL_HANDLE_ENV              1
#define SQL_HANDLE_DBC              2
#define SQL_HANDLE_STMT             3
#define SQL_HANDLE_DESC             4
#endif  /* ODBCVER >= 0x0300 */


/*
 *  Function return codes
 */
#define SQL_SUCCESS             0
#define SQL_SUCCESS_WITH_INFO           1
#define SQL_STILL_EXECUTING         2
#define SQL_ERROR               (-1)
#define SQL_INVALID_HANDLE          (-2)
#define SQL_NEED_DATA               99
#if (ODBCVER >= 0x0300)
#define SQL_NO_DATA             100
#endif  /* ODBCVER >= 0x0300 */


/*
 *  Test for SQL_SUCCESS or SQL_SUCCESS_WITH_INFO
 */
#define SQL_SUCCEEDED(rc)           (((rc) & (~1)) == 0)


/*
 *  Special length values
 */
#define SQL_NULL_DATA               (-1)
#define SQL_DATA_AT_EXEC            (-2)


/*
 *  Flags for null-terminated strings
 */
#define SQL_NTS                 (-3)
#define SQL_NTSL                (-3L)


/*
 *  Standard SQL datatypes, using ANSI type numbering
 */
#define SQL_UNKNOWN_TYPE            0
#define SQL_CHAR                1
#define SQL_NUMERIC             2
#define SQL_DECIMAL             3
#define SQL_INTEGER             4
#define SQL_SMALLINT                5
#define SQL_FLOAT               6
#define SQL_REAL                7
#define SQL_DOUBLE              8
#if (ODBCVER >= 0x0300)
#define SQL_DATETIME                9
#endif  /* ODBCVER >= 0x0300 */
#define SQL_VARCHAR             12


/*
 *  SQLGetTypeInfo request for all data types
 */
#define SQL_ALL_TYPES               0


/*
 *  Statement attribute values for date/time data types
 */
#if (ODBCVER >= 0x0300)
#define SQL_TYPE_DATE               91
#define SQL_TYPE_TIME               92
#define SQL_TYPE_TIMESTAMP          93
#endif  /* ODBCVER >= 0x0300 */


/*
 *  Date/Time length constants
 */
#if (ODBCVER >= 0x0300)
#define SQL_DATE_LEN                10
#define SQL_TIME_LEN                8   /* add P+1 if prec >0 */
#define SQL_TIMESTAMP_LEN           19  /* add P+1 if prec >0 */
#endif  /* ODBCVER >= 0x0300 */


/*
 *  NULL status constants
 */
#define SQL_NO_NULLS                0
#define SQL_NULLABLE                1
#define SQL_NULLABLE_UNKNOWN            2


/*
 *  NULL Handles
 */
#define SQL_NULL_HENV               0
#define SQL_NULL_HDBC               0
#define SQL_NULL_HSTMT              0
#if (ODBCVER >= 0x0300)
#define SQL_NULL_HDESC              0
#endif  /* ODBCVER >= 0x0300 */


/*
 *  NULL handle for parent argument to SQLAllocHandle when allocating
 *  a SQLHENV
 */
#if (ODBCVER >= 0x0300)
#define SQL_NULL_HANDLE             0L
#endif  /* ODBCVER >= 0x0300 */


/*
 *  CLI option values
 */
#if (ODBCVER >= 0x0300)
#define SQL_FALSE               0
#define SQL_TRUE                1
#endif  /* ODBCVER >= 0x0300 */


/*
 *  Default conversion code for SQLBindCol(), SQLBindParam() and SQLGetData()
 */
#if (ODBCVER >= 0x0300)
#define SQL_DEFAULT             99
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLDataSources/SQLFetchScroll - FetchOrientation
 */
#define SQL_FETCH_NEXT              1
#define SQL_FETCH_FIRST             2


/*
 *  SQLFetchScroll - FetchOrientation
 */
#define SQL_FETCH_LAST              3
#define SQL_FETCH_PRIOR             4
#define SQL_FETCH_ABSOLUTE          5
#define SQL_FETCH_RELATIVE          6


/*
 *  SQLFreeStmt
 */
#define SQL_CLOSE               0
#define SQL_DROP                1
#define SQL_UNBIND              2
#define SQL_RESET_PARAMS            3


/*
 *  SQLGetConnectAttr - connection attributes
 */
#if (ODBCVER >= 0x0300)
#define SQL_ATTR_AUTO_IPD           10001
#define SQL_ATTR_METADATA_ID            10014
#endif  /* ODBCVER >= 0x0300 */


/*
 *   SQLGetData() code indicating that the application row descriptor
 *   specifies the data type
 */
#if (ODBCVER >= 0x0300)
#define SQL_ARD_TYPE                (-99)
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetDescField - identifiers of fields in the SQL descriptor
 */
#if (ODBCVER >= 0x0300)
#define SQL_DESC_COUNT              1001
#define SQL_DESC_TYPE               1002
#define SQL_DESC_LENGTH             1003
#define SQL_DESC_OCTET_LENGTH_PTR       1004
#define SQL_DESC_PRECISION          1005
#define SQL_DESC_SCALE              1006
#define SQL_DESC_DATETIME_INTERVAL_CODE     1007
#define SQL_DESC_NULLABLE           1008
#define SQL_DESC_INDICATOR_PTR          1009
#define SQL_DESC_DATA_PTR           1010
#define SQL_DESC_NAME               1011
#define SQL_DESC_UNNAMED            1012
#define SQL_DESC_OCTET_LENGTH           1013
#define SQL_DESC_ALLOC_TYPE         1099
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetDescField - SQL_DESC_ALLOC_TYPE
 */
#if (ODBCVER >= 0x0300)
#define SQL_DESC_ALLOC_AUTO         1
#define SQL_DESC_ALLOC_USER         2
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetDescField - SQL_DESC_DATETIME_INTERVAL_CODE
 */
#if (ODBCVER >= 0x0300)
#define SQL_CODE_DATE               1
#define SQL_CODE_TIME               2
#define SQL_CODE_TIMESTAMP          3
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetDescField - SQL_DESC_UNNAMED
 */
#if (ODBCVER >= 0x0300)
#define SQL_NAMED               0
#define SQL_UNNAMED             1
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetDiagField - identifiers of fields in the diagnostics area
 */
#if (ODBCVER >= 0x0300)
#define SQL_DIAG_RETURNCODE         1
#define SQL_DIAG_NUMBER             2
#define SQL_DIAG_ROW_COUNT          3
#define SQL_DIAG_SQLSTATE           4
#define SQL_DIAG_NATIVE             5
#define SQL_DIAG_MESSAGE_TEXT           6
#define SQL_DIAG_DYNAMIC_FUNCTION       7
#define SQL_DIAG_CLASS_ORIGIN           8
#define SQL_DIAG_SUBCLASS_ORIGIN        9
#define SQL_DIAG_CONNECTION_NAME        10
#define SQL_DIAG_SERVER_NAME            11
#define SQL_DIAG_DYNAMIC_FUNCTION_CODE      12
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetDiagField - SQL_DIAG_DYNAMIC_FUNCTION_CODE
 */
#if (ODBCVER >= 0x0300)
#define SQL_DIAG_ALTER_DOMAIN           3
#define SQL_DIAG_ALTER_TABLE            4
#define SQL_DIAG_CALL               7
#define SQL_DIAG_CREATE_ASSERTION       6
#define SQL_DIAG_CREATE_CHARACTER_SET       8
#define SQL_DIAG_CREATE_COLLATION       10
#define SQL_DIAG_CREATE_DOMAIN          23
#define SQL_DIAG_CREATE_INDEX           (-1)
#define SQL_DIAG_CREATE_SCHEMA          64
#define SQL_DIAG_CREATE_TABLE           77
#define SQL_DIAG_CREATE_TRANSLATION     79
#define SQL_DIAG_CREATE_VIEW            84
#define SQL_DIAG_DELETE_WHERE           19
#define SQL_DIAG_DROP_ASSERTION         24
#define SQL_DIAG_DROP_CHARACTER_SET     25
#define SQL_DIAG_DROP_COLLATION         26
#define SQL_DIAG_DROP_DOMAIN            27
#define SQL_DIAG_DROP_INDEX         (-2)
#define SQL_DIAG_DROP_SCHEMA            31
#define SQL_DIAG_DROP_TABLE         32
#define SQL_DIAG_DROP_TRANSLATION       33
#define SQL_DIAG_DROP_VIEW          36
#define SQL_DIAG_DYNAMIC_DELETE_CURSOR      38
#define SQL_DIAG_DYNAMIC_UPDATE_CURSOR      81
#define SQL_DIAG_GRANT              48
#define SQL_DIAG_INSERT             50
#define SQL_DIAG_REVOKE             59
#define SQL_DIAG_SELECT_CURSOR          85
#define SQL_DIAG_UNKNOWN_STATEMENT      0
#define SQL_DIAG_UPDATE_WHERE           82
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetEnvAttr - environment attribute
 */
#if (ODBCVER >= 0x0300)
#define SQL_ATTR_OUTPUT_NTS         10001
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetFunctions
 */
#define SQL_API_SQLALLOCCONNECT         1
#define SQL_API_SQLALLOCENV         2
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLALLOCHANDLE          1001
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLALLOCSTMT            3
#define SQL_API_SQLBINDCOL          4
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLBINDPARAM            1002
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLCANCEL           5
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLCLOSECURSOR          1003
#define SQL_API_SQLCOLATTRIBUTE         6
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLCOLUMNS          40
#define SQL_API_SQLCONNECT          7
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLCOPYDESC         1004
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLDATASOURCES          57
#define SQL_API_SQLDESCRIBECOL          8
#define SQL_API_SQLDISCONNECT           9
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLENDTRAN          1005
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLERROR            10
#define SQL_API_SQLEXECDIRECT           11
#define SQL_API_SQLEXECUTE          12
#define SQL_API_SQLFETCH            13
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLFETCHSCROLL          1021
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLFREECONNECT          14
#define SQL_API_SQLFREEENV          15
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLFREEHANDLE           1006
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLFREESTMT         16
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLGETCONNECTATTR       1007
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLGETCONNECTOPTION     42
#define SQL_API_SQLGETCURSORNAME        17
#define SQL_API_SQLGETDATA          43
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLGETDESCFIELD         1008
#define SQL_API_SQLGETDESCREC           1009
#define SQL_API_SQLGETDIAGFIELD         1010
#define SQL_API_SQLGETDIAGREC           1011
#define SQL_API_SQLGETENVATTR           1012
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLGETFUNCTIONS         44
#define SQL_API_SQLGETINFO          45
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLGETSTMTATTR          1014
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLGETSTMTOPTION        46
#define SQL_API_SQLGETTYPEINFO          47
#define SQL_API_SQLNUMRESULTCOLS        18
#define SQL_API_SQLPARAMDATA            48
#define SQL_API_SQLPREPARE          19
#define SQL_API_SQLPUTDATA          49
#define SQL_API_SQLROWCOUNT         20
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLSETCONNECTATTR       1016
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLSETCONNECTOPTION     50
#define SQL_API_SQLSETCURSORNAME        21
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLSETDESCFIELD         1017
#define SQL_API_SQLSETDESCREC           1018
#define SQL_API_SQLSETENVATTR           1019
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLSETPARAM         22
#if (ODBCVER >= 0x0300)
#define SQL_API_SQLSETSTMTATTR          1020
#endif  /* ODBCVER >= 0x0300 */
#define SQL_API_SQLSETSTMTOPTION        51
#define SQL_API_SQLSPECIALCOLUMNS       52
#define SQL_API_SQLSTATISTICS           53
#define SQL_API_SQLTABLES           54
#define SQL_API_SQLTRANSACT         23


/*
 *  SQLGetInfo
 */
#if (ODBCVER >= 0x0300)
#define SQL_MAX_DRIVER_CONNECTIONS      0
#define SQL_MAXIMUM_DRIVER_CONNECTIONS      SQL_MAX_DRIVER_CONNECTIONS
#define SQL_MAX_CONCURRENT_ACTIVITIES       1
#define SQL_MAXIMUM_CONCURRENT_ACTIVITIES   SQL_MAX_CONCURRENT_ACTIVITIES
#endif  /* ODBCVER >= 0x0300 */
#define SQL_DATA_SOURCE_NAME            2
#define SQL_FETCH_DIRECTION         8
#define SQL_SERVER_NAME             13
#define SQL_SEARCH_PATTERN_ESCAPE       14
#define SQL_DBMS_NAME               17
#define SQL_DBMS_VER                18
#define SQL_ACCESSIBLE_TABLES           19
#define SQL_ACCESSIBLE_PROCEDURES       20
#define SQL_CURSOR_COMMIT_BEHAVIOR      23
#define SQL_DATA_SOURCE_READ_ONLY       25
#define SQL_DEFAULT_TXN_ISOLATION       26
#define SQL_IDENTIFIER_CASE         28
#define SQL_IDENTIFIER_QUOTE_CHAR       29
#define SQL_MAX_COLUMN_NAME_LEN         30
#define SQL_MAXIMUM_COLUMN_NAME_LENGTH      SQL_MAX_COLUMN_NAME_LEN
#define SQL_MAX_CURSOR_NAME_LEN         31
#define SQL_MAXIMUM_CURSOR_NAME_LENGTH      SQL_MAX_CURSOR_NAME_LEN
#define SQL_MAX_SCHEMA_NAME_LEN         32
#define SQL_MAXIMUM_SCHEMA_NAME_LENGTH      SQL_MAX_SCHEMA_NAME_LEN
#define SQL_MAX_CATALOG_NAME_LEN        34
#define SQL_MAXIMUM_CATALOG_NAME_LENGTH     SQL_MAX_CATALOG_NAME_LEN
#define SQL_MAX_TABLE_NAME_LEN          35
#define SQL_SCROLL_CONCURRENCY          43
#define SQL_TXN_CAPABLE             46
#define SQL_TRANSACTION_CAPABLE         SQL_TXN_CAPABLE
#define SQL_USER_NAME               47
#define SQL_TXN_ISOLATION_OPTION        72
#define SQL_TRANSACTION_ISOLATION_OPTION    SQL_TXN_ISOLATION_OPTION
#define SQL_INTEGRITY               73
#define SQL_GETDATA_EXTENSIONS          81
#define SQL_NULL_COLLATION          85
#define SQL_ALTER_TABLE             86
#define SQL_ORDER_BY_COLUMNS_IN_SELECT      90
#define SQL_SPECIAL_CHARACTERS          94
#define SQL_MAX_COLUMNS_IN_GROUP_BY     97
#define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY     SQL_MAX_COLUMNS_IN_GROUP_BY
#define SQL_MAX_COLUMNS_IN_INDEX        98
#define SQL_MAXIMUM_COLUMNS_IN_INDEX        SQL_MAX_COLUMNS_IN_INDEX
#define SQL_MAX_COLUMNS_IN_ORDER_BY     99
#define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY     SQL_MAX_COLUMNS_IN_ORDER_BY
#define SQL_MAX_COLUMNS_IN_SELECT       100
#define SQL_MAXIMUM_COLUMNS_IN_SELECT       SQL_MAX_COLUMNS_IN_SELECT
#define SQL_MAX_COLUMNS_IN_TABLE        101
#define SQL_MAX_INDEX_SIZE          102
#define SQL_MAXIMUM_INDEX_SIZE          SQL_MAX_INDEX_SIZE
#define SQL_MAX_ROW_SIZE            104
#define SQL_MAXIMUM_ROW_SIZE            SQL_MAX_ROW_SIZE
#define SQL_MAX_STATEMENT_LEN           105
#define SQL_MAXIMUM_STATEMENT_LENGTH        SQL_MAX_STATEMENT_LEN
#define SQL_MAX_TABLES_IN_SELECT        106
#define SQL_MAXIMUM_TABLES_IN_SELECT        SQL_MAX_TABLES_IN_SELECT
#define SQL_MAX_USER_NAME_LEN           107
#define SQL_MAXIMUM_USER_NAME_LENGTH        SQL_MAX_USER_NAME_LEN
#if (ODBCVER >= 0x0300)
#define SQL_OJ_CAPABILITIES         115
#define SQL_OUTER_JOIN_CAPABILITIES     SQL_OJ_CAPABILITIES
#endif  /* ODBCVER >= 0x0300 */

#if (ODBCVER >= 0x0300)
#define SQL_XOPEN_CLI_YEAR          10000
#define SQL_CURSOR_SENSITIVITY          10001
#define SQL_DESCRIBE_PARAMETER          10002
#define SQL_CATALOG_NAME            10003
#define SQL_COLLATION_SEQ           10004
#define SQL_MAX_IDENTIFIER_LEN          10005
#define SQL_MAXIMUM_IDENTIFIER_LENGTH       SQL_MAX_IDENTIFIER_LEN
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetInfo - SQL_ALTER_TABLE
 */
#if (ODBCVER >= 0x0200)
#define SQL_AT_ADD_COLUMN           0x00000001L
#define SQL_AT_DROP_COLUMN          0x00000002L
#endif  /* ODBCVER >= 0x0300 */

#if (ODBCVER >= 0x0300)
#define SQL_AT_ADD_CONSTRAINT           0x00000008L
/*
 * The following bitmasks are ODBC extensions and defined in sqlext.h:
 *
 * #define SQL_AT_COLUMN_SINGLE             0x00000020L
 * #define SQL_AT_ADD_COLUMN_DEFAULT            0x00000040L
 * #define SQL_AT_ADD_COLUMN_COLLATION          0x00000080L
 * #define SQL_AT_SET_COLUMN_DEFAULT            0x00000100L
 * #define SQL_AT_DROP_COLUMN_DEFAULT           0x00000200L
 * #define SQL_AT_DROP_COLUMN_CASCADE           0x00000400L
 * #define SQL_AT_DROP_COLUMN_RESTRICT          0x00000800L
 * #define SQL_AT_ADD_TABLE_CONSTRAINT          0x00001000L
 * #define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE     0x00002000L
 * #define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT    0x00004000L
 * #define SQL_AT_CONSTRAINT_NAME_DEFINITION        0x00008000L
 * #define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED     0x00010000L
 * #define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE    0x00020000L
 * #define SQL_AT_CONSTRAINT_DEFERRABLE         0x00040000L
 * #define SQL_AT_CONSTRAINT_NON_DEFERRABLE     0x00080000L
 */
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetInfo - SQL_ASYNC_MODE
 */
#if (ODBCVER >= 0x0300)
#define SQL_AM_NONE             0
#define SQL_AM_CONNECTION           1
#define SQL_AM_STATEMENT            2
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetInfo - SQL_CURSOR_COMMIT_BEHAVIOR
 */
#define SQL_CB_DELETE               0
#define SQL_CB_CLOSE                1
#define SQL_CB_PRESERVE             2


/*
 *  SQLGetInfo - SQL_FETCH_DIRECTION
 */
#define SQL_FD_FETCH_NEXT           0x00000001L
#define SQL_FD_FETCH_FIRST          0x00000002L
#define SQL_FD_FETCH_LAST           0x00000004L
#define SQL_FD_FETCH_PRIOR          0x00000008L
#define SQL_FD_FETCH_ABSOLUTE           0x00000010L
#define SQL_FD_FETCH_RELATIVE           0x00000020L


/*
 *  SQLGetInfo - SQL_GETDATA_EXTENSIONS
 */
#define SQL_GD_ANY_COLUMN           0x00000001L
#define SQL_GD_ANY_ORDER            0x00000002L


/*
 *  SQLGetInfo - SQL_IDENTIFIER_CASE
 */
#define SQL_IC_UPPER                1
#define SQL_IC_LOWER                2
#define SQL_IC_SENSITIVE            3
#define SQL_IC_MIXED                4


/*
 *  SQLGetInfo - SQL_NULL_COLLATION
 */
#define SQL_NC_HIGH             0
#define SQL_NC_LOW              1


/*
 *  SQLGetInfo - SQL_OJ_CAPABILITIES
 */
#if (ODBCVER >= 0x0201)
#define SQL_OJ_LEFT             0x00000001L
#define SQL_OJ_RIGHT                0x00000002L
#define SQL_OJ_FULL             0x00000004L
#define SQL_OJ_NESTED               0x00000008L
#define SQL_OJ_NOT_ORDERED          0x00000010L
#define SQL_OJ_INNER                0x00000020L
#define SQL_OJ_ALL_COMPARISON_OPS       0x00000040L
#endif


/*
 *  SQLGetInfo - SQL_SCROLL_CONCURRENCY
 */
#define SQL_SCCO_READ_ONLY          0x00000001L
#define SQL_SCCO_LOCK               0x00000002L
#define SQL_SCCO_OPT_ROWVER         0x00000004L
#define SQL_SCCO_OPT_VALUES         0x00000008L


/*
 *  SQLGetInfo - SQL_TXN_CAPABLE
 */
#define SQL_TC_NONE             0
#define SQL_TC_DML              1
#define SQL_TC_ALL              2
#define SQL_TC_DDL_COMMIT           3
#define SQL_TC_DDL_IGNORE           4


/*
 *  SQLGetInfo - SQL_TXN_ISOLATION_OPTION
 */
#define SQL_TXN_READ_UNCOMMITTED        0x00000001L
#define SQL_TRANSACTION_READ_UNCOMMITTED    SQL_TXN_READ_UNCOMMITTED
#define SQL_TXN_READ_COMMITTED          0x00000002L
#define SQL_TRANSACTION_READ_COMMITTED      SQL_TXN_READ_COMMITTED
#define SQL_TXN_REPEATABLE_READ         0x00000004L
#define SQL_TRANSACTION_REPEATABLE_READ     SQL_TXN_REPEATABLE_READ
#define SQL_TXN_SERIALIZABLE            0x00000008L
#define SQL_TRANSACTION_SERIALIZABLE        SQL_TXN_SERIALIZABLE


/*
 *  SQLGetStmtAttr - statement attributes
 */
#if (ODBCVER >= 0x0300)
#define SQL_ATTR_APP_ROW_DESC           10010
#define SQL_ATTR_APP_PARAM_DESC         10011
#define SQL_ATTR_IMP_ROW_DESC           10012
#define SQL_ATTR_IMP_PARAM_DESC         10013
#define SQL_ATTR_CURSOR_SCROLLABLE      (-1)
#define SQL_ATTR_CURSOR_SENSITIVITY     (-2)
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetStmtAttr - SQL_ATTR_CURSOR_SCROLLABLE
 */
#if (ODBCVER >= 0x0300)
#define SQL_NONSCROLLABLE           0
#define SQL_SCROLLABLE              1
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetStmtAttr - SQL_ATTR_CURSOR_SENSITIVITY
 */
#if (ODBCVER >= 0x0300)
#define SQL_UNSPECIFIED             0
#define SQL_INSENSITIVE             1
#define SQL_SENSITIVE               2
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLGetTypeInfo - SEARCHABLE
 */
#if (ODBCVER >= 0x0300)
#define SQL_PRED_NONE               0
#define SQL_PRED_CHAR               1
#define SQL_PRED_BASIC              2
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLSpecialColumns - Column scopes
 */
#define SQL_SCOPE_CURROW            0
#define SQL_SCOPE_TRANSACTION           1
#define SQL_SCOPE_SESSION           2


/*
 *  SQLSpecialColumns - PSEUDO_COLUMN
 */
#define SQL_PC_UNKNOWN              0
#if (ODBCVER >= 0x0300)
#define SQL_PC_NON_PSEUDO           1
#endif  /* ODBCVER >= 0x0300 */
#define SQL_PC_PSEUDO               2


/*
 *  SQLSpecialColumns - IdentifierType
 */
#if (ODBCVER >= 0x0300)
#define SQL_ROW_IDENTIFIER          1
#endif  /* ODBCVER >= 0x0300 */


/*
 *  SQLStatistics - fUnique
 */
#define SQL_INDEX_UNIQUE            0
#define SQL_INDEX_ALL               1


/*
 *  SQLStatistics - TYPE
 */
#define SQL_INDEX_CLUSTERED         1
#define SQL_INDEX_HASHED            2
#define SQL_INDEX_OTHER             3


/*
 *  SQLTransact/SQLEndTran
 */
#define SQL_COMMIT              0
#define SQL_ROLLBACK                1


/*
 *  Function Prototypes
 */
SQLRETURN SQL_API SQLAllocConnect (
    SQLHENV       EnvironmentHandle,
    SQLHDBC     * ConnectionHandle);

SQLRETURN SQL_API SQLAllocEnv (
    SQLHENV     * EnvironmentHandle);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLAllocHandle (
    SQLSMALLINT       HandleType,
    SQLHANDLE         InputHandle,
    SQLHANDLE       * OutputHandle);
#endif  /* ODBCVER >= 0x0300 */

SQLRETURN SQL_API SQLAllocStmt (
    SQLHDBC       ConnectionHandle,
    SQLHSTMT        * StatementHandle);

SQLRETURN SQL_API SQLBindCol (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      ColumnNumber,
    SQLSMALLINT       TargetType,
    SQLPOINTER        TargetValue,
    SQLLEN        BufferLength,
    SQLLEN      * StrLen_or_Ind);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLBindParam (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      ParameterNumber,
    SQLSMALLINT       ValueType,
    SQLSMALLINT       ParameterType,
    SQLULEN       LengthPrecision,
    SQLSMALLINT       ParameterScale,
    SQLPOINTER        ParameterValue,
    SQLLEN      * StrLen_or_Ind);
#endif

SQLRETURN SQL_API SQLCancel (
    SQLHSTMT          StatementHandle);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLCloseCursor (
    SQLHSTMT          StatementHandle);

/*
 *  Using SQLLEN * instead of SQLPOINTER for NumericAttribute,
 *  makes the prototype the same as SQLColAttributes (deprecated)
 *  and clearer for 64bit ports
 */
SQLRETURN SQL_API SQLColAttribute (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      ColumnNumber,
    SQLUSMALLINT      FieldIdentifier,
    SQLPOINTER        CharacterAttribute,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * StringLength,
    SQLLEN      * NumericAttribute);
#endif

SQLRETURN SQL_API SQLColumns (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * CatalogName,
    SQLSMALLINT       NameLength1,
    SQLCHAR     * SchemaName,
    SQLSMALLINT       NameLength2,
    SQLCHAR     * TableName,
    SQLSMALLINT       NameLength3,
    SQLCHAR     * ColumnName,
    SQLSMALLINT       NameLength4);

SQLRETURN SQL_API SQLConnect (
    SQLHDBC       ConnectionHandle,
    SQLCHAR     * ServerName,
    SQLSMALLINT       NameLength1,
    SQLCHAR     * UserName,
    SQLSMALLINT       NameLength2,
    SQLCHAR     * Authentication,
    SQLSMALLINT       NameLength3);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLCopyDesc (
    SQLHDESC          SourceDescHandle,
    SQLHDESC          TargetDescHandle);
#endif

SQLRETURN SQL_API SQLDataSources (
    SQLHENV       EnvironmentHandle,
    SQLUSMALLINT      Direction,
    SQLCHAR     * ServerName,
    SQLSMALLINT       BufferLength1,
    SQLSMALLINT     * NameLength1,
    SQLCHAR     * Description,
    SQLSMALLINT       BufferLength2,
    SQLSMALLINT     * NameLength2);

SQLRETURN SQL_API SQLDescribeCol (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      ColumnNumber,
    SQLCHAR     * ColumnName,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * NameLength,
    SQLSMALLINT     * DataType,
    SQLULEN     * ColumnSize,
    SQLSMALLINT     * DecimalDigits,
    SQLSMALLINT     * Nullable);

SQLRETURN SQL_API SQLDisconnect (
    SQLHDBC       ConnectionHandle);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLEndTran (
    SQLSMALLINT       HandleType,
    SQLHANDLE         Handle,
    SQLSMALLINT       CompletionType);
#endif

SQLRETURN SQL_API SQLError (
    SQLHENV       EnvironmentHandle,
    SQLHDBC       ConnectionHandle,
    SQLHSTMT          StatementHandle,
    SQLCHAR     * Sqlstate,
    SQLINTEGER      * NativeError,
    SQLCHAR     * MessageText,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * TextLength);

SQLRETURN SQL_API SQLExecDirect (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * StatementText,
    SQLINTEGER        TextLength);

SQLRETURN SQL_API SQLExecute (
    SQLHSTMT          StatementHandle);

SQLRETURN SQL_API SQLFetch (
    SQLHSTMT          StatementHandle);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLFetchScroll (
    SQLHSTMT          StatementHandle,
    SQLSMALLINT       FetchOrientation,
    SQLLEN        FetchOffset);
#endif

SQLRETURN SQL_API SQLFreeConnect (
    SQLHDBC       ConnectionHandle);

SQLRETURN SQL_API SQLFreeEnv (
    SQLHENV       EnvironmentHandle);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLFreeHandle (
    SQLSMALLINT       HandleType,
    SQLHANDLE         Handle);
#endif

SQLRETURN SQL_API SQLFreeStmt (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      Option);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLGetConnectAttr (
    SQLHDBC       ConnectionHandle,
    SQLINTEGER        Attribute,
    SQLPOINTER        Value,
    SQLINTEGER        BufferLength,
    SQLINTEGER      * StringLength);
#endif

SQLRETURN SQL_API SQLGetConnectOption (
    SQLHDBC       ConnectionHandle,
    SQLUSMALLINT      Option,
    SQLPOINTER        Value);

SQLRETURN SQL_API SQLGetCursorName (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * CursorName,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * NameLength);

SQLRETURN SQL_API SQLGetData (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      ColumnNumber,
    SQLSMALLINT       TargetType,
    SQLPOINTER        TargetValue,
    SQLLEN        BufferLength,
    SQLLEN      * StrLen_or_Ind);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLGetDescField (
    SQLHDESC          DescriptorHandle,
    SQLSMALLINT       RecNumber,
    SQLSMALLINT       FieldIdentifier,
    SQLPOINTER        Value,
    SQLINTEGER        BufferLength,
    SQLINTEGER      * StringLength);

SQLRETURN SQL_API SQLGetDescRec (
    SQLHDESC          DescriptorHandle,
    SQLSMALLINT       RecNumber,
    SQLCHAR     * Name,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * StringLength,
    SQLSMALLINT     * Type,
    SQLSMALLINT     * SubType,
    SQLLEN      * Length,
    SQLSMALLINT     * Precision,
    SQLSMALLINT     * Scale,
    SQLSMALLINT     * Nullable);

SQLRETURN SQL_API SQLGetDiagField (
    SQLSMALLINT       HandleType,
    SQLHANDLE         Handle,
    SQLSMALLINT       RecNumber,
    SQLSMALLINT       DiagIdentifier,
    SQLPOINTER        DiagInfo,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * StringLength);

SQLRETURN SQL_API SQLGetDiagRec (
    SQLSMALLINT       HandleType,
    SQLHANDLE         Handle,
    SQLSMALLINT       RecNumber,
    SQLCHAR     * Sqlstate,
    SQLINTEGER      * NativeError,
    SQLCHAR     * MessageText,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * TextLength);

SQLRETURN SQL_API SQLGetEnvAttr (
    SQLHENV       EnvironmentHandle,
    SQLINTEGER        Attribute,
    SQLPOINTER        Value,
    SQLINTEGER        BufferLength,
    SQLINTEGER      * StringLength);
#endif /* ODBCVER >= 0x0300 */

SQLRETURN SQL_API SQLGetFunctions (
    SQLHDBC     ConnectionHandle,
    SQLUSMALLINT    FunctionId,
    SQLUSMALLINT *  Supported);

SQLRETURN SQL_API SQLGetInfo (
    SQLHDBC       ConnectionHandle,
    SQLUSMALLINT      InfoType,
    SQLPOINTER        InfoValue,
    SQLSMALLINT       BufferLength,
    SQLSMALLINT     * StringLength);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLGetStmtAttr (
    SQLHSTMT          StatementHandle,
    SQLINTEGER        Attribute,
    SQLPOINTER        Value,
    SQLINTEGER        BufferLength,
    SQLINTEGER      * StringLength);
#endif /* ODBCVER >= 0x0300 */

SQLRETURN SQL_API SQLGetStmtOption (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      Option,
    SQLPOINTER        Value);

SQLRETURN SQL_API SQLGetTypeInfo (
    SQLHSTMT          StatementHandle,
    SQLSMALLINT       DataType);

SQLRETURN SQL_API SQLNumResultCols (
    SQLHSTMT          StatementHandle,
    SQLSMALLINT     * ColumnCount);

SQLRETURN SQL_API SQLParamData (
    SQLHSTMT          StatementHandle,
    SQLPOINTER      * Value);

SQLRETURN SQL_API SQLPrepare (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * StatementText,
    SQLINTEGER        TextLength);

SQLRETURN SQL_API SQLPutData (
    SQLHSTMT          StatementHandle,
    SQLPOINTER        Data,
    SQLLEN        StrLen_or_Ind);

SQLRETURN SQL_API SQLRowCount (
    SQLHSTMT          StatementHandle,
    SQLLEN      * RowCount);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLSetConnectAttr (
    SQLHDBC       ConnectionHandle,
    SQLINTEGER        Attribute,
    SQLPOINTER        Value,
    SQLINTEGER        StringLength);
#endif /* ODBCVER >= 0x0300 */

SQLRETURN SQL_API SQLSetConnectOption (
    SQLHDBC       ConnectionHandle,
    SQLUSMALLINT      Option,
    SQLULEN       Value);

SQLRETURN SQL_API SQLSetCursorName (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * CursorName,
    SQLSMALLINT       NameLength);

#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLSetDescField (
    SQLHDESC          DescriptorHandle,
    SQLSMALLINT       RecNumber,
    SQLSMALLINT       FieldIdentifier,
    SQLPOINTER        Value,
    SQLINTEGER        BufferLength);

SQLRETURN SQL_API SQLSetDescRec (
    SQLHDESC          DescriptorHandle,
    SQLSMALLINT       RecNumber,
    SQLSMALLINT       Type,
    SQLSMALLINT       SubType,
    SQLLEN        Length,
    SQLSMALLINT       Precision,
    SQLSMALLINT       Scale,
    SQLPOINTER        Data,
    SQLLEN      * StringLength,
    SQLLEN      * Indicator);

SQLRETURN SQL_API SQLSetEnvAttr (
    SQLHENV       EnvironmentHandle,
    SQLINTEGER        Attribute,
    SQLPOINTER        Value,
    SQLINTEGER        StringLength);
#endif /* ODBCVER >= 0x0300 */


#if (ODBCVER >= 0x0300)
SQLRETURN SQL_API SQLSetStmtAttr (
    SQLHSTMT          StatementHandle,
    SQLINTEGER        Attribute,
    SQLPOINTER        Value,
    SQLINTEGER        StringLength);
#endif

SQLRETURN SQL_API SQLSetStmtOption (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      Option,
    SQLULEN       Value);

SQLRETURN SQL_API SQLSpecialColumns (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      IdentifierType,
    SQLCHAR     * CatalogName,
    SQLSMALLINT       NameLength1,
    SQLCHAR     * SchemaName,
    SQLSMALLINT       NameLength2,
    SQLCHAR     * TableName,
    SQLSMALLINT       NameLength3,
    SQLUSMALLINT      Scope,
    SQLUSMALLINT      Nullable);

SQLRETURN SQL_API SQLStatistics (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * CatalogName,
    SQLSMALLINT       NameLength1,
    SQLCHAR     * SchemaName,
    SQLSMALLINT       NameLength2,
    SQLCHAR     * TableName,
    SQLSMALLINT       NameLength3,
    SQLUSMALLINT      Unique,
    SQLUSMALLINT      Reserved);

SQLRETURN SQL_API SQLTables (
    SQLHSTMT          StatementHandle,
    SQLCHAR     * CatalogName,
    SQLSMALLINT       NameLength1,
    SQLCHAR     * SchemaName,
    SQLSMALLINT       NameLength2,
    SQLCHAR     * TableName,
    SQLSMALLINT       NameLength3,
    SQLCHAR     * TableType,
    SQLSMALLINT       NameLength4);

SQLRETURN SQL_API SQLTransact (
    SQLHENV       EnvironmentHandle,
    SQLHDBC       ConnectionHandle,
    SQLUSMALLINT      CompletionType);


/*
 *  Depreciated ODBC 1.0 function - Use SQLBindParameter
 */
SQLRETURN SQL_API SQLSetParam (
    SQLHSTMT          StatementHandle,
    SQLUSMALLINT      ParameterNumber,
    SQLSMALLINT       ValueType,
    SQLSMALLINT       ParameterType,
    SQLULEN       LengthPrecision,
    SQLSMALLINT       ParameterScale,
    SQLPOINTER        ParameterValue,
    SQLLEN      * StrLen_or_Ind);

#ifdef __cplusplus
}
#endif

#endif   /* _SQL_H */
